package initalize

import (
	"bytes"
	"context"
	"fmt"
	"github.com/elastic/go-elasticsearch/v8"
	"github.com/elastic/go-elasticsearch/v8/esapi"
	"go.uber.org/zap"
	"mxshop_srvs/goods_srv/global"
	"mxshop_srvs/goods_srv/model"
)

//func InitEs() {
//	// 初始化连接
//	host := fmt.Sprintf("http://%s:%d", global.ServerConfig.EsInfo.Host, global.ServerConfig.EsInfo.Port)
//	// 这里必须将 sniff 设置为 false, 因为使用 olivere/elastic 连接 elasticsearch 时, 发现连接地址明明输入的时候是网地址,
//	// 但是连接时会自动转换成内网地址或者docker中的 ip 地址, 导致服务连接不上
//	logger := log.New(os.Stdout, "mxshop", log.LstdFlags)
//	var err error
//	global.EsClient, err = elastic.NewClient(
//		elastic.SetURL(host),
//		elastic.SetBasicAuth(global.ServerConfig.EsInfo.User, global.ServerConfig.EsInfo.Password),
//		elastic.SetSniff(false),
//		elastic.SetTraceLog(logger))
//	if err != nil {
//		panic(err)
//	}
//
//	// 新建 mapping 和 index
//	exists, err := global.EsClient.IndexExists(model.EsGoods{}.GetIndexName()).Do(context.Background())
//	if err != nil {
//		panic(err)
//	}
//	if !exists {
//		// Create a new index.
//		_, err := global.EsClient.CreateIndex(model.EsGoods{}.GetIndexName()).BodyString(model.EsGoods{}.GetMapping()).Do(context.Background())
//		if err != nil {
//			// Handle error
//			panic(err)
//		}
//	}
//}

func InitEs() {
	// 初始化连接
	host := fmt.Sprintf("http://%s:%d", global.ServerConfig.EsInfo.Host, global.ServerConfig.EsInfo.Port)
	var err error
	global.EsClient, err = elasticsearch.NewClient(
		elasticsearch.Config{
			Addresses: []string{host},
			Username:  "elastic",
			Password:  "56248Qwezxcv",
			//EnableDebugLogger: true,
		},
	)
	if err != nil {
		panic(err)
	}

	// 新建 mapping 和 index
	exists, err := esapi.IndicesExistsRequest{Index: []string{model.EsGoods{}.GetIndexName()}}.Do(context.Background(), global.EsClient)
	if err != nil {
		panic(err)
	}
	defer exists.Body.Close()

	if exists.IsError() {
		// Create a new index.
		exists, err := esapi.IndicesCreateRequest{
			Index: model.EsGoods{}.GetIndexName(),
			Body:  bytes.NewReader([]byte(model.EsGoods{}.GetMapping())),
		}.Do(context.Background(), global.EsClient)
		if err != nil {
			// Handle error
			panic(err)
		}
		defer exists.Body.Close()
	}
	zap.S().Debug("[goods-srv] 初始化 elastic 完成")
}
